// app.js
App({
  onLaunch() {
    const that = this;

    const theme = wx.getStorageSync("theme") || 1;
    that.globalData.theme = theme;

    // 云储存
    if (!wx.cloud) {
      console.error("请使用 2.2.3 或以上的基础库以使用云能力");
    } else {
      wx.cloud.init({
        // env 参数说明：
        //   env 参数决定接下来小程序发起的云开发调用（wx.cloud.xxx）会默认请求到哪个云环境的资源
        //   此处请填入环境 ID, 环境 ID 可打开云控制台查看
        //   如不填则使用默认环境（第一个创建的环境）
        env: "love-0g1b6yqybf5521f5",
        traceUser: true,
      });
      that.getOpenid();
    }
    // 获取系统信息
    that.getSystemInfo();
    // 检查更新
    that.autoUpdate();
    // 判断版本
    that.getAccountInfoSync();
    // 全局分享
    that.overShare();
  },

  // 获取openid
  getOpenid() {
    let that = this;
    wx.cloud.callFunction({
      name: "get",
      success: (res) => {
        var openid = res.result.openid;
        var unionid = res.result.unionid;
        that.globalData.openid = openid;
        that.globalData.unionid = unionid;
        that.globalData.hasOpenid = true;
      },
      fail: (err) => {
        wx.showModal({
          title: "错误提示",
          content: "获取信息出现错误，请重试",
          showCancel: false,
          complete: (res) => {
            if (res.confirm) {
            }
          },
        });
      },
      complete: () => { },
    });
  },

  // 判断获取opened成功
  getOpenidSuccess: function (callback) {
    var that = this;
    if (typeof callback === "function") {
      if (that.globalData.hasOpenid) {
        callback();
        if (interval) {
          clearInterval(interval);
        }
      } else {
        var interval = setInterval(function () {
          if (that.globalData.hasOpenid) {
            callback();
            clearInterval(interval);
          }
        }, 100);
      }
    }
  },

  getSystemInfo() {
    const that = this;
    // 获取系统信息
    const systemInfo = wx.getSystemInfoSync();
    // 胶囊按钮位置信息
    const menuButtonInfo = wx.getMenuButtonBoundingClientRect();
    // 导航栏高度 = 状态栏高度 + 44
    // that.globalData.navBarHeight = systemInfo.statusBarHeight + 44;
    that.globalData.navBarHeight = systemInfo.statusBarHeight + menuButtonInfo.height + (menuButtonInfo.top - systemInfo.statusBarHeight) * 2;
    that.globalData.menuRight = systemInfo.screenWidth - menuButtonInfo.right;
    that.globalData.menuTop = menuButtonInfo.top;
    that.globalData.menuBotton = menuButtonInfo.top - systemInfo.statusBarHeight;
    that.globalData.menuHeight = menuButtonInfo.height;
    that.globalData.menuWidth = menuButtonInfo.width;
    that.globalData.screenHeight = systemInfo.screenHeight;
    that.globalData.screenWidth = systemInfo.screenWidth;
  },

  getAccountInfoSync() {
    const {
      miniProgram: { envVersion },
    } = wx.getAccountInfoSync();
    switch (envVersion) {
      case "develop":
        this.globalData.switch = false;
        break;
      case "trial":
        this.globalData.switch = true;
        break;
      case "release":
        this.globalData.switch = false;
        break;
      default:
        this.globalData.switch = false;
        break;
    }
  },

  autoUpdate: function () {
    let _this = this;
    // 获取小程序更新机制的兼容，由于更新的功能基础库要1.9.90以上版本才支持，所以此处要做低版本的兼容处理
    if (wx.canIUse("getUpdateManager")) {
      // wx.getUpdateManager接口，可以获知是否有新版本的小程序、新版本是否下载好以及应用新版本的能力，会返回一个UpdateManager实例
      const updateManager = wx.getUpdateManager();
      // 检查小程序是否有新版本发布，onCheckForUpdate：当小程序向后台请求完新版本信息，会通知这个版本告知检查结果
      updateManager.onCheckForUpdate(function (res) {
        // 请求完新版本信息的回调
        if (res.hasUpdate) {
          // 检测到新版本，需要更新，给出提示
          wx.showModal({
            title: "更新提示",
            content: "检测到新版本，是否下载新版本并重启小程序",
            success: function (res) {
              if (res.confirm) {
                // 用户确定更新小程序，小程序下载和更新静默进行
                _this.downLoadAndUpdate(updateManager);
              } else if (res.cancel) {
                // 若用户点击了取消按钮，二次弹窗，强制更新，如果用户选择取消后不需要进行任何操作，则以下内容可忽略
                wx.showModal({
                  title: "提示",
                  content:
                    "本次版本更新涉及到新功能的添加，旧版本将无法正常使用",
                  showCancel: false, // 隐藏取消按钮
                  confirmText: "确认更新", // 只保留更新按钮
                  success: function (res) {
                    if (res.confirm) {
                      // 下载新版本，重启应用
                      _this.downLoadAndUpdate(updateManager);
                    }
                  },
                });
              }
            },
          });
        }
      });
    } else {
      // 在最新版本客户端上体验小程序
      wx.showModal({
        title: "提示",
        content: "当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试",
      });
    }
  },
  // 下载小程序最新版本并重启
  downLoadAndUpdate: function (updateManager) {
    wx.showLoading();
    // 静默下载更新小程序新版本，onUpdateReady：当新版本下载完成回调
    updateManager.onUpdateReady(function () {
      wx.hideLoading();
      // applyUpdate：强制当前小程序应用上新版本并重启
      updateManager.applyUpdate();
    });
    // onUpdateFailed：当新版本下载失败回调
    updateManager.onUpdateFailed(function () {
      // 下载新版本失败
      wx.showModal({
        title: "已有新版本",
        content: "新版本已经上线了，请删除当前小程序，重新搜索打开",
      });
    });
  },

  // 全局分享
  overShare: function () {
    let _this = this;

    //间接实现全局设置分享内容
    wx.onAppRoute(function (res) {
      //获取加载的页面
      let pages = getCurrentPages(),
        //获取当前页面的对象
        view = pages[pages.length - 1],
        data;
      if (view) {
        data = view.data;
        if (!data.isOverShare) {
          data.isOverShare = true;
          // console.log('全局分享参数：', _this.getShareUrlParams())
          view.onShareAppMessage = function () {
            //重写分享配置
            return {
              title: "情侣专属记事本——小本本nn",
              path: "/pages/login/login",
              imageUrl: "/static/icon/share.jpg",
            };
          };
        }
      }
    });
  },
  globalData: {
    openid: "",
    unionid: "",
    hasOpenid: false,
    theme: 1,
    switch: false,
    userInfo: null,
    loveTime: "",
    navBarHeight: 0, // 导航栏高度
    menuRight: 0, // 胶囊距右方间距（方保持左、右间距一致）
    menuTop: 0,
    menuBotton: 0, // 胶囊距底部间距（保持底部间距一致）
    menuHeight: 0, // 胶囊高度（自定义内容可与胶囊高度保证一致）
    menuWidth: 0, // 胶囊宽度
    screenHeight: 0,
    screenWidth: 0,
  },
});
